package com.mbengue.corp.artisan.dao;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.mbengue.corp.artisan.modele.Article;
import com.mbengue.corp.artisan.modele.ArticlesFeuille;
import com.mbengue.corp.artisan.modele.Devis;
import com.mbengue.corp.artisan.modele.Facture;
import com.mbengue.corp.artisan.modele.Feuille;

public interface ArticleFeuilleDao {
  /**
   * Ajoute une nouvelle jointure Article-Feuille à la BD.
   * @param articlesFeuille jointure à créer.
   * @throws DataAccessException
   */
  public void ajouterArticleFeuille(ArticlesFeuille articlesFeuille) throws DataAccessException;

  /**
   * Met à jour la jointure Article-Feuille donné en entrée.
   * @param articlesFeuille jointure à mettre à jour.
   * @throws DataAccessException
   */
  public void modifierArticleFeuille(ArticlesFeuille articlesFeuille) throws DataAccessException;

  /**
   * Supprime de la BD la jointure Article-Feuille donné en entrée.
   * @param articlesFeuille jointure à supprimer.
   * @throws DataAccessException
   */
  public void supprimerArticleFeuille(ArticlesFeuille articlesFeuille) throws DataAccessException;

  /**
   * Supprime toutes les jointures sur lesquelles cette feuille est présente.
   * @param feuille
   * @throws DataAccessException
   */
  public void supprimerJointureParFeuille(Feuille feuille) throws DataAccessException;

  /**
   * Supprime toutes les jointures sur lesquelles cet article apparaît.
   * @param article
   * @throws DataAccessException
   */
  public void supprimerJointureParArticle(Article article) throws DataAccessException;

  /**
   * Trouve la jointure entre le numero de feuille et le code article<br/>
   * spécifiés en entrée.
   * @param numero {@link String} identifiant d'une {@link Feuille}.
   * @param code {@link String} identifiant d'un {@link Article}.
   * @return {@link ArticlesFeuille}
   * @throws DataAccessException
   */
  public ArticlesFeuille trouverArticleFeuille(Feuille feuille, Article article) throws DataAccessException;

  /**
   * Retrouve tous les articles de la feuille donnée en entrée.
   * @param numero
   * @return {@link List}<code><</code>{@link Article}<code>></code>
   * @throws DataAccessException
   */
  public List<Article> tousLesArticlesD1Feuille(String numero) throws DataAccessException;

  /**
   * Retrouve tous les articles de la facture donné en entrée.
   * @param numero
   * @return {@link List}<code><</code>{@link Article}<code>></code>
   * @throws DataAccessException
   */
  public List<Article> tousLesArticlesD1Facture(String numero) throws DataAccessException;

  /**
   * Retrouve tous les articles du devis donné en entrée.
   * @param numero
   * @return {@link List}<code><</code>{@link Article}<code>></code>
   * @throws DataAccessException
   */
  public List<Article> tousLesArticlesD1Devis(String numero) throws DataAccessException;

  /**
   * Retrouve toutes les feuilles dans lesquelles l'article<br/>
   * donné en entrée est présent ...
   * @param article
   * @return {@link List}<code><</code>{@link Feuille}<code>></code>
   * @throws DataAccessException
   */
  public List<Feuille> toutesLesFeuillesD1Article(Article article) throws DataAccessException;

  /**
   * Retrouve toutes les facture dans lesquelles l'article<br/>
   * donné en entrée est présent ...
   * @param article
   * @return {@link List}<code><</code>{@link Facture}<code>></code>
   * @throws DataAccessException
   */
  public List<Facture> toutesLesFacturesD1Article(Article article) throws DataAccessException;

  /**
   * Retrouve tous les devis dans lesquelles l'article<br/>
   * donné en entrée est présent ...
   * @param article
   * @return {@link List}<code><</code>{@link Devis}<code>></code>
   * @throws DataAccessException
   */
  public List<Devis> tousLesDevisD1Article(Article article) throws DataAccessException;
}
